/*
栈内存：用来执行代码的
也叫作用域（全局作用域、私有作用域），它有两个作用：
1. 为JS代码提供执行的环境(执行js代码的地方)
2. 基本数据类型的值是直接存放在栈内存中的


堆内存：用来存东西的
存储引用数据类型值的（相当于一个存储的仓库）
1. 对象存储的是键值对
2. 函数存储的是代码字符串
*/


/*
    内存的释放:

    1. 堆内存的释放
    ↓当前对象对应的堆内存被变量o占用着，此时堆内存是无法销毁的
*/
var o = {};

o = null;
/*
null叫空对象指针，不指向任何的堆内存，此时上一次的堆内存就没有被占用了，可以释放了
谷歌浏览器会在空闲时间把没有被占用的堆内存自动释放（销毁/回收）。
IE浏览器有计数器(堆内存被多少个变量占用)，没有被占用时，计数器就会置为0，就会触发回收。
*/

/*
    2. 栈内存的释放
        2.1私有作用域的执行以及释放
        一般情况，函数执行形成栈内存，函数执行完，浏览器会把形成的栈内存自动释放。
        但有时候执行完成，栈内存不能被释放（涉及作用域 作用域链）
        >函数执行完成，当前私有作用域中的某一部分内容被栈内存以外的其它东西（变量/元素的事件）占用了。当前的栈内存就不能释放掉，也就形成了不销毁的私有作用域（里面的私有变量也不会销毁）。

        2.2全局作用域的执行以及释放
        全局作用域在加载页面时执行
        在关掉页面时销毁
*/